#ifndef GAMMACONTAINER_H
#define GAMMACONTAINER_H

#include <bitset>
#include <fstream>
#include <stdexcept>


class GammaContainer {
private:
	// 128 bytes - 8 bytes de metadata
	std::bitset<960> buffPrimario;
	unsigned short int cantBitsBufferPrimario;

	void agregarContenedor(std::bitset<32> bs);
	std::bitset<32> codificarPrimerParte(const unsigned int val) const;

public:
	GammaContainer();
	virtual ~GammaContainer();

	void clear();
	bool is_full() const;
	bool is_empty() const;

	unsigned int getCantBits() const;
	unsigned int getCantBytes() const;

	// Para agregar y extraer elementos
	GammaContainer& operator<<(const unsigned int val);
	GammaContainer& operator>>(unsigned int &val);

	// Usados para la serializacion de los datos
	int serializar(char* arrBytes);
	int desSerializar(char* arrBytes);

	// Carga y almacena todos los elementos en un archivo
	void load(std::ifstream &fin);
	void store(std::ofstream &fout) const;
};


#endif
